/***********************************************************************************
 * 文件名： mcu_eeprom.h
 * 版本： 1
 * 说明：
 * 		SC8F577X 的EEPROM外设驱动。使用说明见头文件。在 sc8_driver_config.h 文件中可配置初始状态。
 * 修改记录：
 * 	2022/04/15: 初版。 黄均铭。
***********************************************************************************/
#include "mcu_eeprom.h"

#if SC8P_MCU_TYPE == SC8F577x

/***********************************************
函数名称：Eeprom_Write
函数功能：写数据/程序寄存器
入口参数：Addr - 写入地址，范围0-127
         Value - 写入数值
出口参数：无
备注：写入时间 5ms
************************************************/
void Eeprom_Write(u8 Addr, u8 Value)
{
    u8 gie;

    EEADR = Addr;  //将要写入的地址放入EEADDR寄存器
    EEPGD = 0;     //访问数据存储器
    EEDAT = Value; //将要写入的数据给EEPROM的数据寄存器
    WREN = 1;      //允许写周期
    gie = GIE;     //存储总中断状态

    if (gie)
    {
        GIE = 0; //关闭中断
        while (GIE)
            GIE = 0; //确保中断已关闭
    }
    asm("clrwdt");

    EECON2 = 0x55; //给EECON2写入0x55
    EECON2 = 0xaa; //给EECON2写入0xaa
    WR = 1;        //启动写周期
    asm("nop");    //
    asm("nop");    //
    WREN = 0;      //禁止写入
    GIE = gie;     //开启中断
}

/***********************************************
函数名称：Eeprom_Read
函数功能：读数据/程序寄存器
入口参数：Addr - 读取地址，范围0-127
出口参数：返回读取地址相应数值
备注：
************************************************/
u8 Eeprom_Read(u8 Addr)
{
    EEADR = Addr; //将要写入的地址放入EEADDR寄存器
    EEPGD = 0;    //访问数据存储器
    RD = 1;       //允许读操作
    asm("nop");
    asm("nop");

    return EEDAT;
}

#endif